#ifndef __MODULEMGR_H
#define __MODULEMGR_H

#include <commonheader.h>
#include <sdhlp/singleton.h>
#include <sdnet.h>
#include <sdtimer.h>
#include <sdpipe.h>
#include <sddb.h>
#include <sdgate.h>

using namespace SGDP;

class CLog : public ISDLogger
{
public:
    bool SDAPI LogText(const char* pszLog)
    {
        SYS_IMPORTANT("pipe log --- %s \n", pszLog);
        return true;
    }

    bool SDAPI LogBinary(const UINT8* pLog, UINT32 dwLen)
    {
        return true;
    }
};

class CNetLog : public ISDLogger
{
public:
    bool SDAPI LogText(const char* pszLog)
    {
        SYS_IMPORTANT("net log --- %s \n", pszLog);
        return true;
    }

    bool SDAPI LogBinary(const UINT8* pLog, UINT32 dwLen)
    {
        return true;
    }
};

class CModuleMgr
{
DECLARE_SINGLETON(CModuleMgr)	

public:
    bool Init();
    void UnInit();
    
	ISDNet*			GetNetModule()		{ return m_poNetModule; }
	ISDTimerModule* GetTimerModule()	{ return m_poTimerModule; }
    ISDPipeModule*	GetPipeModule()		{ return m_poPipeModule; }
    ISDDBModule*	GetDBModule()		{ return m_poDBModule; }
    
protected:
	CModuleMgr();
	virtual ~CModuleMgr();
	
	bool _LoadCoreModule();
	void _UnLoadCoreModule();

	bool _LoadNetModule();
	void _UnLoadNetModule();

	bool _LoadTimerModule();
	void _UnLoadTimerModule();

	bool _LoadPipeModule();
	void _UnLoadPipeModule();

	bool _LoadDBModule();
	void _UnLoadDBModule();
    
private:

    ISDNet*				m_poNetModule;
	ISDTimerModule*		m_poTimerModule;
    ISDPipeModule*		m_poPipeModule;

    ISDDBModule*		m_poDBModule;
};

#endif //__MODULEMGR_H
